package easy;

import com.sun.webkit.network.URLs;

import java.util.ArrayList;

public class DAY06 {

    public static void main(String[] args) {
        System.out.println(essss("{[]}"));
    }

    public static boolean essss(String string) {
        String[] strings = {"{}", "()", "[]"};
        while (string.contains(strings[0]) ||
                string.contains(strings[1]) ||
                string.contains(strings[2])) {
            string = string.replace(strings[0], "");
            string = string.replace(strings[1], "");
            string = string.replace(strings[2], "");
        }
        return string.isEmpty();
    }

    /**
     * 这是我首先想到的办法,从头开始获取string的每个元素进行比较，如果是左边的符号自动加入到 list中,如果是右边的符号,与list最后一个进行比较,如果能够凑对则去掉List中最后一个元素,
     * 最后在string为空的时候判断List是否则为空。
     * 执行用时 :6 ms, 在所有 Java 提交中击败了 8.55%的用户
     * 内存消耗 :40.1 MB, 在所有 Java 提交中击败了5.48%的用户
     */

    static public boolean isValid(String s) {
        ArrayList<String> strings = new ArrayList<>();
        String str1 = "(";
        String str2 = ")";
        String str3 = "{";
        String str4 = "}";
        String str5 = "[";
        String str6 = "]";
        String str7 = "({[";
        String str8 = ")}]";

        if (s.isEmpty())    return true;
        while (!s.isEmpty()) {
            String string = s.substring(0, 1);
            s = s.substring(1,s.length());
            if (str8.contains(string)) {
                // TODO: 2020/5/20 判断是否有前缀
                if (string.equals(str2) && strings.size() > 0) {
                    if (strings.get(strings.size() -1).equals(str1))    strings.remove(strings.size() -1);
                    else return false;
                } else if (string.equals(str4) && strings.size() > 0) {
                    if (strings.get(strings.size() -1).equals(str3))    strings.remove(strings.size() -1);
                    else return false;
                } else if (string.equals(str6) && strings.size() > 0) {
                    if (strings.get(strings.size() -1).equals(str5))    strings.remove(strings.size() -1);
                    else return false;
                } else {
                    return false;
                }
            } else if (str7.contains(string)) {
                strings.add(string);
            }
        }
        if (strings.size() == 0) {
            return true;
        }
        else {
            return false;
        }
    }


    /**
     * 这是一个超级超级牛逼的思维,为什么我没有想到呢！
     * 执行用时 :42 ms, 在所有 Java 提交中击败了5.14%的用户
     * 内存消耗 :40.1 MB, 在所有 Java 提交中击败了5.48%的用户
     */
    static public boolean isValid2(String s) {
        String[] strings = {"[]", "{}", "()"};
        while (s.contains(strings[0]) || s.contains(strings[1]) || s.contains(strings[2])) {
            s = s.replace(strings[0], "");
            s = s.replace(strings[1], "");
            s = s.replace(strings[2], "");
        }
        if (s.isEmpty())    return true;
        else return false;
    }

}
